二叉树的js生成

  1. 二叉树的概念
    二叉树概念及相关操作

  2. 本文是顺序二叉树及其操作的js实现,非顺序二叉树应该也差不多,这里没有实现

//基本二叉树的实现
function BT(){
  this.root=null;
  this.Node=function(e){
    this.value=e;
    this.left=null;
    this.right=null;
  }
  //添加元素
  this.insert=function(e){
    function recursiveAdd(tem,e){
      if(e.value<tem.value){
        if(tem.left==null){
          tem.left=e;
        }else{
          tem=tem.left;
          return recursiveAdd(tem,e);
        }
      }else{
        if(tem.right==null){
          tem.right=e;
        }else{
          tem=tem.right;
          return recursiveAdd(tem,e);
        }
      }
    }
    e=new this.Node(e);
    if(this.root==null){
      this.root=e;
    }else{
      TEM=this.root;
      recursiveAdd(TEM,e);
    }
    return this.root;
  }
  //查找元素
  this.find=function(e){
    function recursiveFind(tem,e){
      if(tem.value==e.value){
        console.log(tem);
        return tem;
      }else{
        if(e.value<tem.value){
          tem=tem.left;
          recursiveFind(tem,e)
        }else{
          if(e.value>tem.value){
            tem=tem.right;
            recursiveFind(tem,e)
          }
        }
      }
    }
    e=new this.Node(e);
    if(this.root==null){
      return;
    }else{
      TEM=this.root;
      recursiveFind(TEM,e);
    }
  }
  //删除元素
  this.delete=function(e){
    function recursiveDelete(tem,e){
      if(e.value<tem.value){
        if(tem.left==null){
          return;
        }else{
          if(tem.left.value==e.value){
            tem.left=null;
            return;
          }else{
            tem=tem.left;
            recursiveDelete(tem,e)
          }
        }
      }else{
        if(e.value>tem.value){
          if(tem.right==null){
            return;
          }else{
            if(tem.right.value==e.value){
              tem.right=null;
              return;
            }else{
              tem=tem.right;
              recursiveDelete(tem,e)
            }
          }
        }
      }
    }
    e=new this.Node(e);
    if(this.root==e){
      this.root=null;
    }else{
      TEM=this.root;
      recursiveDelete(TEM,e);
    }
  }
}

具体使用方法

var obj = new BT();
console.time('insertTest');
obj.insert(55);
obj.insert(44);
obj.insert(33);
obj.insert(22);
obj.insert(66);
obj.insert(77);
obj.insert(88);
obj.insert(60);
obj.insert(58);
obj.insert(63);
obj.insert(57);
obj.insert(56);
console.timeEnd('insertTest');
console.time('findTest');
obj.find(63);
console.timeEnd('findTest');
console.time('deleteTest');
obj.delete(57);
console.timeEnd('deleteTest');

zorroyz
25 声望7 粉丝